/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package com.model.domain.persona;

import com.model.domain.equipo.DispositivoMovil;
import com.model.domain.ubicacion.Distrito;
import com.model.domain.ubicacion.Odei;
import com.model.domain.usuario.Usuario;
import java.math.BigDecimal;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Date;
import java.util.EnumMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import util.date.DateUtil;
import util.NumberUtil;
import util.StringUtil;
import util.enums.EnumUtil;

/**
 *
 * @author Rdelacruz
 */
public class Personal {
    private String dni;
    private String nombres;
    private String apellidoPaterno;
    private String apellidoMaterno;
    private String correo;    
    private String fechaNacimiento;
    private Sexo sexo;
    private EstadoCivil estadoCivil;
    private Cargo cargo;
    //String nivelEducativo;//FALTA EN TABLA
    private String profesion;//Agustin dice que con la profesion se puede calcular el nivel educativo    
    private Odei odei;
    //private Departamento departamento;//este atributo está en ODEI
    
    private boolean accesoMovil;//Boolean causa problemas en JSTL. "Boolean isAccesoMovil()" no es reconocido
    private boolean accesoPBasico;
    private boolean accesoPFinal;
    private String direccion;
    private String telefono;
    
    private String lugarNacimiento;
    //Departamento departamento;//está en ODEI
    //Provincia provincia;//está en distrito
    private Distrito distrito;
    private Integer nroHijos;
    private Integer nroHijosMenor1;//menor de 1 año
    private Integer nroHijosEntre1_2;//De 1 a 2 años
    private Integer nroHijosEntre3_5;//De 3 a 5 años
    private Integer nroHijosEntre6_12;//De 6 a 12 años
    private Integer nroHijosEntre13_17;//De 13 a 17 años
    private Integer nroHijosMayor18;//De 18 a más años
    private String grupoSanguineo;
    private BigDecimal peso;
    private BigDecimal estatura;
    private String telefonoCelular;
    private LenguaMaterna lenguaMaterna;
    private String otraLenguaMaterna;
    private TallaRopa tallaChaleco;
    private TallaRopa tallaPolo;
    private NivelEducativo nivelEducativo;
    private CondicionNivelEducativo condicionNivelEducativo;
    
    private String carrera;
    private String centroEstudios;
    private String añoInicioEstudio;
    private String añoFinalEstudio;
    private String fechaObtencionGrado;
    private Boolean tieneEstudiosComputacion;
        
    private List<CursoEstudiado> cursosLlevados;
            
    /*
    private CursoLlevado curso1;
    private CursoLlevado curso2;
    private CursoLlevado curso3;
    private CursoLlevado curso4;
    private CursoLlevado curso5;
    private CursoLlevado curso6;
    */
    
    private Integer añosExperienciaEnaho;
    private Integer mesesExperienciaEnaho;
    
    private Boolean tuvoOtraExperienciaLaboral;
    private Integer añosOtraExperienciaLaboral;
    private Integer mesesOtraExperienciaLaboral;
    
    private SeguroPensiones seguroPensiones;
    
    private String fechaReferenciaSalud;
    private Boolean tuvoProblemaSalud;
    private Boolean problemaGastrointestinal;
    private Boolean problemaRespiratorio;
    private Boolean problemaCirculatorio;
    private Boolean problemaHormonal;
    private Boolean problemaNeurologico;
    private Boolean problemaGenitourinario;
    private Boolean problemaIntervencionQuirurgica;
    private Boolean problemaAlergias;
    private Boolean problemaOtro;
    private String otroProblemaSalud;
    
    private Boolean practicaDeporte;
    private String deportePracticado;    
    
    /*
    String fechaIngreso;
    Usuario usuarioDigitacion;
    Date fechaDigitacion;
    Usuario usuarioMod;
    Date fechaMod;
    */
    
    private Usuario usuario;
    
    private DispositivoMovil movil;
    
    public CursoEstudiado getCursoLlevadoByNumero(int n) {
        if(cursosLlevados!=null) {
            for(CursoEstudiado c : cursosLlevados) {
                if(c.getNumero()==n)
                    return c;
            }
        }
        return null;
    }

  
    
    @Override
    public boolean equals(Object obj) {
        if(obj!=null) {
            Personal p = (Personal) obj;
            return dni!=null ? dni.equals(p.getDni()) : p.getDni()==null;
        }
        return false;
    }    
    
    public String getDNINombresYApellidos() {
        return dni + " " + getNombresYApellidos();
    }
    
    public String getApellidosYNombres() {
        List<String> lista = new ArrayList<String>();                
        if(apellidoPaterno!=null)
            lista.add(apellidoPaterno);
        if(apellidoMaterno!=null)
            lista.add(apellidoMaterno);
        
        String nom = "";
        if(!lista.isEmpty() && nombres!=null) {
            nom = ", "+nombres;
        }        
        return StringUtil.unirSeparadoPor(lista, " ")+nom;
    }
    
    public String getNombresYApellidos() {
        List<String> lista = new ArrayList<String>();        
        if(nombres!=null)
            lista.add(nombres);
        if(apellidoPaterno!=null)
            lista.add(apellidoPaterno);
        if(apellidoMaterno!=null)
            lista.add(apellidoMaterno);
        
        return StringUtil.unirSeparadoPor(lista, " ");
    }
    
    public void setProblemaSalud(String[] valores) {
        if(valores!=null) {
            Map<ProblemaSalud,Boolean> valoresEnum = new EnumMap<ProblemaSalud,Boolean>(ProblemaSalud.class);
            for(String v:valores) {
                ProblemaSalud e = EnumUtil.getEnumByLiteral(ProblemaSalud.class, v);
                valoresEnum.put(e,true);
            }
            
            problemaGastrointestinal = valoresEnum.get(ProblemaSalud.A)!=null;
            problemaRespiratorio = valoresEnum.get(ProblemaSalud.B)!=null;
            problemaCirculatorio = valoresEnum.get(ProblemaSalud.C)!=null;
            problemaHormonal = valoresEnum.get(ProblemaSalud.D)!=null;
            problemaNeurologico = valoresEnum.get(ProblemaSalud.E)!=null;
            problemaGenitourinario = valoresEnum.get(ProblemaSalud.F)!=null;
            problemaIntervencionQuirurgica = valoresEnum.get(ProblemaSalud.G)!=null;
            problemaAlergias = valoresEnum.get(ProblemaSalud.H)!=null;
            problemaOtro = valoresEnum.get(ProblemaSalud.Z)!=null;
                            
        }
    }
    
    public boolean isTuvoProblemaSalud(ProblemaSalud e) {
        switch(e) {
            case A:
                return NumberUtil.BooleanToPrimitivo(this.problemaGastrointestinal);
            case B:
                return NumberUtil.BooleanToPrimitivo(this.problemaRespiratorio);
            case C:
                return NumberUtil.BooleanToPrimitivo(this.problemaCirculatorio);
            case D:
                return NumberUtil.BooleanToPrimitivo(this.problemaHormonal);
            case E:
                return NumberUtil.BooleanToPrimitivo(this.problemaNeurologico);
            case F:
                return NumberUtil.BooleanToPrimitivo(this.problemaGenitourinario);
            case G:
                return NumberUtil.BooleanToPrimitivo(this.problemaIntervencionQuirurgica);
            case H:
                return NumberUtil.BooleanToPrimitivo(this.problemaAlergias);
            case Z:
                return NumberUtil.BooleanToPrimitivo(this.problemaOtro);
        }
        return false;
    }
    
    public String getOtroProblemaSalud() {
        return otroProblemaSalud;
    }

    public void setOtroProblemaSalud(String otroProblemaSalud) {
        this.otroProblemaSalud = otroProblemaSalud;
    }
    
    public String getDni() {
        return dni;
    }

    public void setDni(String dni) {
        this.dni = dni;
    }

    public String getNombres() {
        return nombres;
    }

    public void setNombres(String nombres) {
        this.nombres = nombres;
    }

    public String getApellidoPaterno() {
        return apellidoPaterno;
    }

    public void setApellidoPaterno(String apellidoPaterno) {
        this.apellidoPaterno = apellidoPaterno;
    }

    public String getApellidoMaterno() {
        return apellidoMaterno;
    }

    public void setApellidoMaterno(String apellidoMaterno) {
        this.apellidoMaterno = apellidoMaterno;
    }

    public Usuario getUsuario() {
        return usuario;
    }

    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }
    
    public String getCorreo() {
        return correo;
    }

    public void setCorreo(String correo) {
        this.correo = correo;
    }

    public String getFechaNacimiento() {
        return fechaNacimiento;
    }

    public void setFechaNacimiento(String fechaNacimiento) {
        this.fechaNacimiento = fechaNacimiento;
    }

    public EstadoCivil getEstadoCivil() {
        return estadoCivil;
    }

    public void setEstadoCivil(EstadoCivil estadoCivil) {
        this.estadoCivil = estadoCivil;
    }

    public Cargo getCargo() {
        return cargo;
    }

    public void setCargo(Cargo cargo) {
        this.cargo = cargo;
    }

    public Odei getOdei() {
        return odei;
    }

    public void setOdei(Odei odei) {
        this.odei = odei;
    }

    

    

    public boolean isAccesoMovil() {
        return accesoMovil;
    }

    public void setAccesoMovil(boolean accesoMovil) {
        this.accesoMovil = accesoMovil;
    }

    public boolean isAccesoPBasico() {
        return accesoPBasico;
    }

    public void setAccesoPBasico(boolean accesoPBasico) {
        this.accesoPBasico = accesoPBasico;
    }

    public boolean isAccesoPFinal() {
        return accesoPFinal;
    }

    public void setAccesoPFinal(boolean accesoPFinal) {
        this.accesoPFinal = accesoPFinal;
    }

    public Sexo getSexo() {
        return sexo;
    }

    public void setSexo(Sexo sexo) {
        this.sexo = sexo;
    }

    public String getProfesion() {
        return profesion;
    }

    public void setProfesion(String profesion) {
        this.profesion = profesion;
    }

    public String getDireccion() {
        return direccion;
    }

    public void setDireccion(String direccion) {
        this.direccion = direccion;
    }

    public String getTelefono() {
        return telefono;
    }

    public void setTelefono(String telefono) {
        this.telefono = telefono;
    }

    public DispositivoMovil getMovil() {
        return movil;
    }

    public void setMovil(DispositivoMovil movil) {
        this.movil = movil;
    }

    public String getLugarNacimiento() {
        return lugarNacimiento;
    }

    public void setLugarNacimiento(String lugarNacimiento) {
        this.lugarNacimiento = lugarNacimiento;
    }

    public Distrito getDistrito() {
        return distrito;
    }

    public void setDistrito(Distrito distrito) {
        this.distrito = distrito;
    }

    public Integer getNroHijos() {
        return nroHijos;
    }

    public void setNroHijos(Integer nroHijos) {
        this.nroHijos = nroHijos;
    }

    public Integer getNroHijosMenor1() {
        return nroHijosMenor1;
    }

    public void setNroHijosMenor1(Integer nroHijosMenor1) {
        this.nroHijosMenor1 = nroHijosMenor1;
    }

    public Integer getNroHijosEntre1_2() {
        return nroHijosEntre1_2;
    }

    public void setNroHijosEntre1_2(Integer nroHijosEntre1_2) {
        this.nroHijosEntre1_2 = nroHijosEntre1_2;
    }

    public Integer getNroHijosEntre3_5() {
        return nroHijosEntre3_5;
    }

    public void setNroHijosEntre3_5(Integer nroHijosEntre3_5) {
        this.nroHijosEntre3_5 = nroHijosEntre3_5;
    }

    public Integer getNroHijosEntre6_12() {
        return nroHijosEntre6_12;
    }

    public void setNroHijosEntre6_12(Integer nroHijosEntre6_12) {
        this.nroHijosEntre6_12 = nroHijosEntre6_12;
    }

    public Integer getNroHijosEntre13_17() {
        return nroHijosEntre13_17;
    }

    public void setNroHijosEntre13_17(Integer nroHijosEntre13_17) {
        this.nroHijosEntre13_17 = nroHijosEntre13_17;
    }

    public Integer getNroHijosMayor18() {
        return nroHijosMayor18;
    }

    public void setNroHijosMayor18(Integer nroHijosMayor18) {
        this.nroHijosMayor18 = nroHijosMayor18;
    }

  

    public String getGrupoSanguineo() {
        return grupoSanguineo;
    }

    public void setGrupoSanguineo(String grupoSanguineo) {
        this.grupoSanguineo = grupoSanguineo;
    }

    public BigDecimal getPeso() {
        return peso;
    }

    public void setPeso(BigDecimal peso) {
        this.peso = peso;
    }

    public BigDecimal getEstatura() {
        return estatura;
    }

    public void setEstatura(BigDecimal estatura) {
        this.estatura = estatura;
    }

    public String getTelefonoCelular() {
        return telefonoCelular;
    }

    public void setTelefonoCelular(String telefonoCelular) {
        this.telefonoCelular = telefonoCelular;
    }

    public LenguaMaterna getLenguaMaterna() {
        return lenguaMaterna;
    }

    public void setLenguaMaterna(LenguaMaterna lenguaMaterna) {
        this.lenguaMaterna = lenguaMaterna;
    }

    public String getOtraLenguaMaterna() {
        return otraLenguaMaterna;
    }

    public void setOtraLenguaMaterna(String otraLenguaMaterna) {
        this.otraLenguaMaterna = otraLenguaMaterna;
    }

    public TallaRopa getTallaChaleco() {
        return tallaChaleco;
    }

    public void setTallaChaleco(TallaRopa tallaChaleco) {
        this.tallaChaleco = tallaChaleco;
    }

    public TallaRopa getTallaPolo() {
        return tallaPolo;
    }

    public void setTallaPolo(TallaRopa tallaPolo) {
        this.tallaPolo = tallaPolo;
    }
    
    

    public NivelEducativo getNivelEducativo() {
        return nivelEducativo;
    }

    public void setNivelEducativo(NivelEducativo nivelEducativo) {
        this.nivelEducativo = nivelEducativo;
    }

    public CondicionNivelEducativo getCondicionNivelEducativo() {
        return condicionNivelEducativo;
    }

    public void setCondicionNivelEducativo(CondicionNivelEducativo condicionNivelEducativo) {
        this.condicionNivelEducativo = condicionNivelEducativo;
    }

    public String getCarrera() {
        return carrera;
    }

    public void setCarrera(String carrera) {
        this.carrera = carrera;
    }

    public String getCentroEstudios() {
        return centroEstudios;
    }

    public void setCentroEstudios(String centroEstudios) {
        this.centroEstudios = centroEstudios;
    }

    public String getAñoInicioEstudio() {
        return añoInicioEstudio;
    }

    public void setAñoInicioEstudio(String añoInicioEstudio) {
        this.añoInicioEstudio = añoInicioEstudio;
    }

    public String getAñoFinalEstudio() {
        return añoFinalEstudio;
    }

    public void setAñoFinalEstudio(String añoFinalEstudio) {
        this.añoFinalEstudio = añoFinalEstudio;
    }

    public String getFechaObtencionGrado() {
        return fechaObtencionGrado;
    }

    public void setFechaObtencionGrado(String fechaObtencionGrado) {
        this.fechaObtencionGrado = fechaObtencionGrado;
    }

    

    public Boolean isTieneEstudiosComputacion() {
        return tieneEstudiosComputacion;
    }

    public void setTieneEstudiosComputacion(Boolean tieneEstudiosComputacion) {
        this.tieneEstudiosComputacion = tieneEstudiosComputacion;
    }

    public Integer getAñosExperienciaEnaho() {
        return añosExperienciaEnaho;
    }

    public void setAñosExperienciaEnaho(Integer añosExperienciaEnaho) {
        this.añosExperienciaEnaho = añosExperienciaEnaho;
    }

    public Integer getMesesExperienciaEnaho() {
        return mesesExperienciaEnaho;
    }

    public void setMesesExperienciaEnaho(Integer mesesExperienciaEnaho) {
        this.mesesExperienciaEnaho = mesesExperienciaEnaho;
    }

    public Boolean isTuvoOtraExperienciaLaboral() {
        return tuvoOtraExperienciaLaboral;
    }

    public void setTuvoOtraExperienciaLaboral(Boolean tuvoOtraExperienciaLaboral) {
        this.tuvoOtraExperienciaLaboral = tuvoOtraExperienciaLaboral;
    }

    public Integer getAñosOtraExperienciaLaboral() {
        return añosOtraExperienciaLaboral;
    }

    public void setAñosOtraExperienciaLaboral(Integer añosOtraExperienciaLaboral) {
        this.añosOtraExperienciaLaboral = añosOtraExperienciaLaboral;
    }

    public Integer getMesesOtraExperienciaLaboral() {
        return mesesOtraExperienciaLaboral;
    }

    public void setMesesOtraExperienciaLaboral(Integer mesesOtraExperienciaLaboral) {
        this.mesesOtraExperienciaLaboral = mesesOtraExperienciaLaboral;
    }

    public SeguroPensiones getSeguroPensiones() {
        return seguroPensiones;
    }

    public void setSeguroPensiones(SeguroPensiones seguroPensiones) {
        this.seguroPensiones = seguroPensiones;
    }

    public Boolean isTuvoProblemaSalud() {
        return tuvoProblemaSalud;
    }

    public void setTuvoProblemaSalud(Boolean tuvoProblemaSalud) {
        this.tuvoProblemaSalud = tuvoProblemaSalud;
    }

    public Boolean isProblemaGastrointestinal() {
        return problemaGastrointestinal;
    }

    public void setProblemaGastrointestinal(Boolean problemaGastrointestinal) {
        this.problemaGastrointestinal = problemaGastrointestinal;
    }

    public Boolean isProblemaRespiratorio() {
        return problemaRespiratorio;
    }

    public void setProblemaRespiratorio(Boolean problemaRespiratorio) {
        this.problemaRespiratorio = problemaRespiratorio;
    }

    public Boolean isProblemaCirculatorio() {
        return problemaCirculatorio;
    }

    public void setProblemaCirculatorio(Boolean problemaCirculatorio) {
        this.problemaCirculatorio = problemaCirculatorio;
    }

    public Boolean isProblemaHormonal() {
        return problemaHormonal;
    }

    public void setProblemaHormonal(Boolean problemaHormonal) {
        this.problemaHormonal = problemaHormonal;
    }

    public Boolean isProblemaNeurologico() {
        return problemaNeurologico;
    }

    public void setProblemaNeurologico(Boolean problemaNeurologico) {
        this.problemaNeurologico = problemaNeurologico;
    }

    public Boolean isProblemaGenitourinario() {
        return problemaGenitourinario;
    }

    public void setProblemaGenitourinario(Boolean problemaGenitourinario) {
        this.problemaGenitourinario = problemaGenitourinario;
    }

    public Boolean isProblemaIntervencionQuirurgica() {
        return problemaIntervencionQuirurgica;
    }

    public void setProblemaIntervencionQuirurgica(Boolean problemaIntervencionQuirurgica) {
        this.problemaIntervencionQuirurgica = problemaIntervencionQuirurgica;
    }

    public Boolean isProblemaAlergias() {
        return problemaAlergias;
    }

    public void setProblemaAlergias(Boolean problemaAlergias) {
        this.problemaAlergias = problemaAlergias;
    }

    public Boolean isPracticaDeporte() {
        return practicaDeporte;
    }

    public void setPracticaDeporte(Boolean practicaDeporte) {
        this.practicaDeporte = practicaDeporte;
    }

    public String getDeportePracticado() {
        return deportePracticado;
    }

    public void setDeportePracticado(String deportePracticado) {
        this.deportePracticado = deportePracticado;
    }

    public List<CursoEstudiado> getCursosLlevados() {
        return cursosLlevados;
    }

    public void setCursosLlevados(List<CursoEstudiado> cursosLlevados) {
        this.cursosLlevados = cursosLlevados;
    }

    public String getFechaReferenciaSalud() {
        return fechaReferenciaSalud;
    }

    public void setFechaReferenciaSalud(String fechaReferenciaSalud) {
        this.fechaReferenciaSalud = fechaReferenciaSalud;
    }

    public Boolean isProblemaOtro() {
        return problemaOtro;
    }

    public void setProblemaOtro(Boolean problemaOtro) {
        this.problemaOtro = problemaOtro;
    }

    public Integer getEdadCalculada() {
        return DateUtil.getEdad(fechaNacimiento);
    }

    
    
    
    
}
